import axios from 'axios'
import { Message } from 'element-ui' // 引入 Message 组件


// 创建axios实例
const service = axios.create({
  baseURL: 'http://localhost:9002', // API的基础URL
  timeout: 30000, // 增加请求超时时间到30秒
  withCredentials: true // 允许携带cookie
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('token')
    if (token) {
      config.headers['Authorization'] = 'Bearer ' + token
    }
    
    // 添加重试标记
    if (config.retry === undefined) {
      config.retry = 0;
      config.retryDelay = 1000;
      config.retryLimit = 3;
    }
    
    return config
  },
  error => {
    console.error('请求错误：', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    // 这里可以根据后端的响应结构进行相应的处理
    if (res.code !== 200) {
      Message({ // 使用引入的 Message 组件
        message: res.message || '请求失败',
        type: 'error',
        duration: 5 * 1000
      })
      return res // 返回后端的错误信息
    } else {
      return res // 返回成功的响应
    }
  },
  error => {
    // 获取请求配置和响应状态
    const config = error.config;
    const statusCode = error.response ? error.response.status : null;
    
    // 处理503服务不可用错误，尝试重试请求
    if (statusCode === 503 && config && config.retry < config.retryLimit) {
      // 增加重试次数
      config.retry += 1;
      
      // 创建新的Promise等待重试
      const backoff = new Promise(resolve => {
        setTimeout(() => {
          console.log(`重试请求: ${config.url}, 第 ${config.retry} 次`);
          resolve();
        }, config.retryDelay || 1000);
      });
      
      // 重试请求并返回
      return backoff.then(() => service(config));
    }
    
    console.error('响应错误：', error);
    let errorMessage = '服务器错误，请稍后重试';
    
    if (error.message.includes('timeout')) {
      errorMessage = '请求超时，请检查网络连接';
    } else if (statusCode) {
      switch (statusCode) {
        case 400:
          errorMessage = '请求错误';
          break;
        case 401:
          errorMessage = '未授权，请重新登录';
          // 可能需要清除token并跳转到登录页
          localStorage.removeItem('token');
          window.location.href = '/login';
          break;
        case 403:
          errorMessage = '拒绝访问';
          break;
        case 404:
          errorMessage = '请求地址不存在';
          break;
        case 500:
          errorMessage = '服务器内部错误';
          break;
        case 503:
          errorMessage = '服务不可用，请稍后再试';
          break;
        default:
          errorMessage = `未知错误 ${statusCode}`;
      }
    }
    
    Message({
      message: errorMessage,
      type: 'error',
      duration: 5 * 1000
    });
    
    return Promise.reject(error);
  }
)

export default service








